package biblioGraphiqueV2;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JComboBox;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.util.HashMap;

import javax.swing.ScrollPaneConstants;

/**
 * Fenêtre de recherche par auteur
 * Code du JFrame généré par Window Builder/Swing Designer
 * @author lovillej
 *@version 1.0
 */

public class VueRechercherParAuteur extends Vue {
	
	private static final long serialVersionUID = 1L;
	
	private JPanel contentPane;
	// TextArea : ////////////////////////
	private JTextArea textAreaExemplaires;
	private JTextArea textAreaArticles;
	// ScrollPane : //////////////////
	private JScrollPane scrollPaneArticles;
	private JScrollPane scrollPaneExemplaires;
	// ComboBox : ///////////////////
	private JComboBox comboBoxAuteur;
	// Button : ///////////////////////
	private JButton buttonRech;
	private JButton buttonAnnuler;
	private JButton buttonFermer;
	
	
	/**
	 * Constructeur de la fenêtre
	 */
	public VueRechercherParAuteur(Controleur controleur) {
		super(controleur);
		setTitle("Informations par auteur");
		//setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 452, 640);
		contentPane = new JPanel();
		this.addWindowListener (new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
			getControleur().fermerVue(VueRechercherParAuteur.this);
			}
		});
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNomAuteur = new JLabel("Nom et Prénom de l'auteur : ");
		lblNomAuteur.setBounds(12, 45, 183, 15);
		lblNomAuteur.setHorizontalAlignment(SwingConstants.RIGHT);
		contentPane.add(lblNomAuteur);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.setBounds(263, 76, 107, 25);
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueRechercherParAuteur.this);
			}
		});
		contentPane.add(buttonAnnuler);
		
		buttonRech = new JButton("Rechercher");
		buttonRech.setBounds(61, 76, 107, 25);
		buttonRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().rechOuvrageParAuteur(comboBoxAuteur.getSelectedItem().toString());
			}
		});
		contentPane.add(buttonRech);
		
		buttonFermer = new JButton("Fermer");
		buttonFermer.setBounds(175, 576, 107, 25);
		buttonFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueRechercherParAuteur.this);
			}
		});
		contentPane.add(buttonFermer);
		
		comboBoxAuteur = new JComboBox();
		comboBoxAuteur.setBounds(213, 40, 183, 24);
		contentPane.add(comboBoxAuteur);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(70, 125, 300, 10);
		contentPane.add(separator);
		
		JLabel lblExemplaires = new JLabel("Exemplaires");
		lblExemplaires.setBounds(175, 147, 85, 15);
		contentPane.add(lblExemplaires);
		
		scrollPaneExemplaires = new JScrollPane();
		scrollPaneExemplaires.setBounds(44, 174, 363, 132);
		scrollPaneExemplaires.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneExemplaires.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		contentPane.add(scrollPaneExemplaires);
		
		textAreaExemplaires = new JTextArea();
		scrollPaneExemplaires.setViewportView(textAreaExemplaires);
		
		scrollPaneArticles = new JScrollPane();
		scrollPaneArticles.setBounds(44, 380, 363, 132);
		scrollPaneArticles.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneArticles.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		contentPane.add(scrollPaneArticles);
		
		textAreaArticles = new JTextArea();
		scrollPaneArticles.setColumnHeaderView(textAreaArticles);
		
		JLabel lblArticles_1 = new JLabel("Articles");
		lblArticles_1.setBounds(199, 353, 61, 15);
		contentPane.add(lblArticles_1);
		}
	

	/**
	 *  Alimentation de la comboBoxAuteur
	 */
	
	public void alimenteAuteur() {
		
		HashMap<String, Auteur> auteur;
		auteur = getControleur().getAuteurs();
		for (String mapKey : auteur.keySet()) {
			comboBoxAuteur.addItem(auteur.get(mapKey).getNom() + " " + auteur.get(mapKey).getPrenom());
		}
	}
	
	/**
	 *  Alimentation de la liste Exemplaires + Ouvrages
	 */
	public void alimenteExemplaires(HashMap<String, Ouvrage> ouvrages) {
		HashMap<Integer, Exemplaire> exemplaires;
		boolean expresent = false;
		
		if (ouvrages == null) {
			textAreaExemplaires.append("Il n'y a pas d'ouvrage enregistré");
		}
		else {
			for (String mapKey : ouvrages.keySet()) {
				textAreaExemplaires.append("Isbn : " + ouvrages.get(mapKey).getIsbn() + "  Titre : " + ouvrages.get(mapKey).getTitre() + " \n");
				exemplaires = ouvrages.get(mapKey).getExemplaireDico();
				expresent = false;
				for (Integer mapKeyEx : exemplaires.keySet()) {
					textAreaExemplaires.append("          Numéro Exemplaire : " + exemplaires.get(mapKeyEx).getNumero() + " -> ");
					if(exemplaires.get(mapKeyEx).getStatut() == 0) {
						textAreaExemplaires.append("Empruntable \n");
					}
					else {
						textAreaExemplaires.append("Consultable \n");
					}
					expresent = true;
				}
				if (expresent == false) {
					textAreaExemplaires.append("          Aucun exemplaire disponible \n");
				}
			}
		}
	}
	
	/**
	 * Alimentation de la liste d'articles
	 */
	public void alimenteArticles(HashMap<String, Article> art){
		int artpresent = 0;
		if (art == null) {
			textAreaArticles.append("Il n'y a aucun article");
		}
		else {
			for (String mapKey : art.keySet()) {
				textAreaArticles.append("Parution numéro " + art.get(mapKey).getParution().getIdent() + " Titre : " + art.get(mapKey).getTitre() + "\n");
				artpresent++;
			}
			if(artpresent == 0) {
				textAreaArticles.append("Il n'y a aucun article disponible pour cet auteur");
			}
		}
	}
	
	/**
	 * Définition des états de la fenêtre
	 */
	public void setEtat (int etat) {
		switch (etat) {
			case initiale: {
				alimenteAuteur();
				buttonRech.setEnabled(true);
				buttonAnnuler.setEnabled(true);
				buttonFermer.setEnabled(false);
				break;
			}
			case finale: {
				buttonRech.setEnabled(false);
				buttonAnnuler.setEnabled(false);
				buttonFermer.setEnabled(true);
				textAreaExemplaires.setEditable(true);
				textAreaArticles.setEditable(true);
				comboBoxAuteur.setEditable(false);
				break;
			}
		}
	}
	
}